package service

import "web_api_gin/dto"

// SysRole 系统角色逻辑类
var SysRole = SysRoleService{}

type SysRoleService struct {
}

// BuildTree 构建树结构数据,(由于需要保留菜单结构数据，因此每一次树结构菜单都需要在对应的service中实现，使用公共的树方法无法还原原始菜单数据)
func (s *SysRoleService) BuildTree(resources []*dto.SysRoleTree) []*dto.SysRoleTree {
	//定义根树，既id=0的根节点，我用的时候并不存在于数据库
	var rootResource = dto.SysRoleTree{}
	//创建一个map，把父级相同的地址归纳起来
	DataMap := make(map[uint32][]*dto.SysRoleTree, len(resources))
	//寻找对应的父级，添加子节点集合
	for key := range resources {
		pid := resources[key].ParentId
		DataMap[pid] = append(DataMap[pid], resources[key])
	}
	for key := range resources {
		if resources[key].ParentId == 0 {
			rootResource.Children = append(rootResource.Children, resources[key])
		}
		resources[key].Children = DataMap[resources[key].RoleId]
	}
	// 添加完成，既建立树形关系完成
	return rootResource.Children
}
